import request from '@/utils/request'
import qs from 'qs';

const PICTURE_FORMAT = 'm'; //默认的图片格式，根据接口有 s、m、l 三种

/******************** 验证码相关 start ********************/
/**
 * 发送短信验证码
 * @param {String} mobile 手机号
 * @param {Number} sms_type 短信类型 1：登录使用 2：注册使用 3：找回密码使用，默认为登录使用
 */
export const sendSmscode = (mobile, sms_type) => {
    return request({
        url: "/v1/user/smscode/get",
        method: "get",
        params: {
            mobile,
            sms_type,
        },
    });
}

/**
 * 获取图形验证码接口
 * @returns 
 */
export const getCaptcha = () => {
    return request({
        url: "/v1/user/captcha/get",
        method: "get",
    });
}
/******************** 验证码相关 end ********************/

/******************** 用户登录注册相关 start ********************/
/**
 * 用户登录
 * @param {Object} params 登录参数 
 * @returns 
 */
export const login = (params) => {
    return request({
        url: "/v1/user/login",
        method: "post",
        data: params,
        headers: {
            "Content-Type": "application/json",
        },
    });
}

/**
 * 用户注册 
 * @param {Object} userInfo 用户信息 
 */
export const register = (userInfo) => {
    return request({
        url: "/v1/user/register",
        method: "post",
        headers: {
            "Content-Type": "application/json",
        },
        data: userInfo,
    });
}

/**
 * 找回密码接口
 * @param {Object} userInfo 用户信息
 * @returns 
 */
export const retrievePassword = (userInfo) => {
    return request({
        url: "/v1/user/retrieve/password",
        method: "post",
        headers: {
            "Content-Type": "application/json",
        },
        data: userInfo,
    });
}
/******************** 用户登录注册相关 end ********************/

/******************** 用户信息相关 start ********************/
/**
 * 用户资料获取
 * @returns 
 */
export const userInfo = () => {
    return request({
        url: "/v1/user/profile/get",
        method: "get",
    });
}

/**
 * 用户资料编辑
 */
export const userInfoEdit = (user_name, self_introduction, avatar_file) => {
    return request({
        url: "/v1/user/profile/editing",
        method: "post",
        headers: {
            "Content-Type": "multipart/form-data",
        },
        data: {
            user_name,
            self_introduction,
            avatar_file,
        },
    });
}

/**
 * 用户提交认证接口
 * @param {Object} data 用户认证信息表单
 * @returns 
 */
export const submitUserAuthentication = (data) => {
    return request({
        url: "/v1/user/authentication/submit",
        method: "post",
        headers: "Content-Type: application/json",
        data,
    });
}
/******************** 用户信息相关 end ********************/

/******************** 用户通知消息相关 start ********************/
/**
 * 会话列表
 * @param {Number} session_type 会话类型（根据初始化发起人的类型确认）1：刊社来访 2：读者信箱
 * @param {String} cover_format 用户头像图片质量，s: 小图 m: 中图 l: 大图 
 */
export const sessionList = (session_type, cover_format = PICTURE_FORMAT) => {
    return request({
        url: "/v1/notice/session/list",
        method: "get",
        params: {
            session_type,
            cover_format,
        },
    });
}

/**
 * 获取会话详情
 * @param {Number} session_id 会话 ID 
 * @returns 
 */
export const sessionDetails = (session_id) => {
    return request({
        url: "/v1/notice/session/detail",
        method: "get",
        params: {
            session_id,
        },
    });
}

/**
 * 获取会话下消息内容列表
 * @param {Number} session_id 会话 ID 
 * @param {Number} page_limit 会页偏移量(每页数据条数)，默认10
 * @param {String} cursor 游标值，用于约束区间使用，默认为0，表示是第一页数据 
 * @returns 
 */
export const messageList = (session_id, page_limit = 10, cursor = 0) => {
    return request({
        url: "/v1/notice/message/list",
        method: "get",
        params: {
            session_id,
            page_limit,
            cursor,
        },
    });
}

/**
 * 发送消息接口
 * @param {Number} session_id 会话 id 
 * @param {Number} message_type 消息类型 1：文本消息 2：图片消息
 * @param {String} content 消息内容或上传的文件
 * @returns 
 */
export const sendMessage = (session_id, message_type, content) => {
    let data = undefined;
    if (2 === message_type) {
        data = new FormData();
        data.append("session_id", session_id);
        data.append("message_type", message_type);
        data.append("content", content);
    } else {
        data = qs.stringify({
            session_id: session_id,
            message_type: message_type,
            content: content,
        });
    }
    return request({
        url: "/v1/notice/message/send",
        method: "post",
        headers: "Content-Type: " + (2 === message_type? "multipart/form-data": "application/x-www-form-urlencoded"),
        data,
    });
}

/**
 * 创建与刊社的会话
 * @param {Number} press_id 刊社 id 
 * @returns 
 */
export const createSession = (press_id) => {
    return request({
        url: "/v1/notice/session/create",
        method: "post",
        headers: "Content-Type: application/json",
        data: {
            press_id,
        },
    });
}
/******************** 用户通知消息相关 end ********************/

/**
 * 获取已参与的活动列表
 * @param {Number} page_num 当前请求页
 * @param {Number} page_limit 每页请求条数 
 * @param {String} cover_format 活动封面图片尺寸 三种格式: s m l
 * @param {String} logo_format 报刊社 logo 图片尺寸三种格式： s m l
 * @returns 
 */
export const participatedActivityList = (page_num, page_limit, cover_format = PICTURE_FORMAT, logo_format = PICTURE_FORMAT) => {
    return request({
        url: "/v1/user/participated/activity/list",
        method: "get",
        params: {
            page_num,
            page_limit,
            cover_format,
        },
    });
}

/******************** 用户关注相关 start ********************/
/**
 * 关注的人物列表
 * @param {Number} page_num  
 * @param {Number} page_limit 
 * @param {String} cover_format 封面图片尺寸 三种格式 s m l
 * @param {String} logo_format 报刊社 logo 图片尺寸三种格式： s m l
 */
export const attentionPersonList = (page_num, page_limit, cover_format = PICTURE_FORMAT, logo_format = PICTURE_FORMAT) => {
    return request({
        url: "/v1/user/attention/influential/person/list",
        method: "get",
        params: {
            page_num,
            page_limit, 
            cover_format,
            logo_format,
        },
    });
}

/**
 * 关注的报刊社列表
 * @param {Number} page_num 
 * @param {Number} page_limit 
 * @param {String} cover_format 封面图片尺寸 三种格式工：s、m、l
 * @param {String} logo_format  报刊社 logo 图片尺寸 三种格式：s、m、l
 * @returns 
 */
export const attentionPressList = (page_num, page_limit, cover_format = PICTURE_FORMAT, logo_format = PICTURE_FORMAT) => {
    return request({
        url: "/v1/user/attention/press/list",
        method: "get",
        params: {
            page_num,
            page_limit,
            cover_format,
            logo_format,
        },
    });
}
/******************** 用户关注相关 end ********************/

/******************** 用户浏览记录相关 start ********************/
/**
 * 活动浏览记录列表
 * @param {Number} page_num 
 * @param {Number} page_limit 
 * @param {String} cover_format 活动封面图片尺寸 三种格式：s、m、l
 * @param {String} logo_format 报刊社 logo 图片尺寸 三种格式： s、m、l
 * @returns 
 */
export const browsingActivityList = (page_num, page_limit, cover_format = PICTURE_FORMAT, logo_format = PICTURE_FORMAT) => {
    return request({
        url: "/v1/user/browsing/activity/list",
        method: "get",
        params: {
            page_num,
            page_limit,
            cover_format,
            logo_format,
        },
    });
}

/**
 * 文章浏览记录列表
 * @param {Number} page_num 
 * @param {Number} page_limit 
 * @param {String} cover_format 文章封面图片尺寸 三种格式：s、m、l
 * @param {String} logo_format 报刊社 logo 图片尺寸 三种格式： s、m、l
 * @returns 
 */
export const browsingArticleList = (page_num, page_limit, cover_format = PICTURE_FORMAT, logo_format = PICTURE_FORMAT) => {
    return request({
        url: "/v1/user/browsing/article/list",
        method: "get",
        params: {
            page_num,
            page_limit,
            cover_format,
            logo_format,
        },
    });
}

/**
 * 音频浏览记录列表
 * @param {Number} page_num 
 * @param {Number} page_limit 
 * @param {String} cover_format 音频封面图片尺寸 三种格式：s、m、l
 * @param {String} logo_format 报刊社 logo 图片尺寸 三种格式： s、m、l
 * @returns 
 */
export const browsingAudioList = (page_num, page_limit, cover_format = PICTURE_FORMAT, logo_format = PICTURE_FORMAT) => {
    return request({
        url: "/v1/user/browsing/audio/list",
        method: "get",
        params: {
            page_num,
            page_limit,
            cover_format,
            logo_format,
        },
    });
}

/**
 * 专栏浏览记录列表
 * @param {Number} page_num 
 * @param {Number} page_limit 
 * @param {String} cover_format 专栏封面图片尺寸 三种格式：s、m、l
 * @param {String} logo_format 报刊社 logo 图片尺寸 三种格式： s、m、l
 * @returns 
 */
export const browsingColumnList = (page_num, page_limit, cover_format = PICTURE_FORMAT, logo_format = PICTURE_FORMAT) => {
    return request({
        url: "/v1/user/browsing/column/list",
        method: "get",
        params: {
            page_num,
            page_limit,
            cover_format,
            logo_format,
        },
    });
}

/**
 * 文创产品浏览记录列表
 * @param {Number} page_num 
 * @param {Number} page_limit 
 * @param {String} cover_format 专栏封面图片尺寸 三种格式：s、m、l
 * @param {String} logo_format 报刊社 logo 图片尺寸 三种格式： s、m、l
 * @returns 
 */
export const browsingCulturalProductList = (page_num, page_limit, cover_format = PICTURE_FORMAT, logo_format = PICTURE_FORMAT) => {
    return request({
        url: "/v1/user/browsing/cultural/products/list",
        method: "get",
        params: {
            page_num,
            page_limit,
            cover_format,
            logo_format,
        },
    });
}

/**
 * 数据库产品浏览记录列表
 * @param {Number} page_num 
 * @param {Number} page_limit 
 * @param {String} cover_format 封面图片尺寸 三种格式：s、m、l
 * @param {String} logo_format 报刊社 logo 图片尺寸 三种格式： s、m、l
 * @returns 
 */
export const browsingDatabaseProductList = (page_num, page_limit, cover_format = PICTURE_FORMAT, logo_format = PICTURE_FORMAT) => {
    return request({
        url: "/v1/user/browsing/database/products/list",
        method: "get",
        params: {
            page_num,
            page_limit,
            cover_format,
            logo_format,
        },
    });
}

/**
 * 原创 IP 产品浏览记录列表
 * @param {Number} page_num 
 * @param {Number} page_limit 
 * @param {String} cover_format 封面图片尺寸 三种格式：s、m、l
 * @param {String} logo_format 报刊社 logo 图片尺寸 三种格式： s、m、l
 * @returns 
 */
export const browsingIPProductList = (page_num, page_limit, cover_format = PICTURE_FORMAT, logo_format = PICTURE_FORMAT) => {
    return request({
        url: "/v1/user/browsing/ip/products/list",
        method: "get",
        params: {
            page_num,
            page_limit,
            cover_format,
            logo_format,
        },
    });
}

/**
 * 纸刊浏览记录列表
 * @param {Number} page_num 
 * @param {Number} page_limit 
 * @param {String} cover_format 封面图片尺寸 三种格式：s、m、l
 * @param {String} logo_format 报刊社 logo 图片尺寸 三种格式： s、m、l
 * @returns 
 */
export const browsingJournalList = (page_num, page_limit, cover_format = PICTURE_FORMAT, logo_format = PICTURE_FORMAT) => {
    return request({
        url: "/v1/user/browsing/journal/list",
        method: "get",
        params: {
            page_num,
            page_limit,
            cover_format,
            logo_format,
        },
    });
}

/**
 * 人物浏览记录列表
 * @param {Number} page_num 
 * @param {Number} page_limit 
 * @param {String} cover_format 封面图片尺寸 三种格式：s、m、l
 * @param {String} logo_format 报刊社 logo 图片尺寸 三种格式： s、m、l
 * @returns 
 */
export const browsingPersonList = (page_num, page_limit, cover_format = PICTURE_FORMAT, logo_format = PICTURE_FORMAT) => {
    return request({
        url: "/v1/user/browsing/person/list",
        method: "get",
        params: {
            page_num,
            page_limit,
            cover_format,
            logo_format,
        },
    });
}

/**
 * 报刊社浏览记录列表
 * @param {Number} page_num 
 * @param {Number} page_limit 
 * @param {String} cover_format 封面图片尺寸 三种格式：s、m、l
 * @param {String} logo_format 报刊社 logo 图片尺寸 三种格式： s、m、l
 * @returns 
 */
export const browsingPressList = (page_num, page_limit, cover_format = PICTURE_FORMAT, logo_format = PICTURE_FORMAT) => {
    return request({
        url: "/v1/user/browsing/press/list",
        method: "get",
        params: {
            page_num,
            page_limit,
            cover_format,
            logo_format,
        },
    });
}
/******************** 用户浏览记录相关 end ********************/

/******************** 用户收藏相关 start ********************/
/**
 * 收藏的活动列表
 * @param {Number} page_num 
 * @param {Number} page_limit 
 * @param {String} cover_format 活动封面图片尺寸 三种格式：s、m、l
 * @param {String} logo_format 报刊社 logo 图片尺寸 三种格式： s、m、l
 * @returns 
 */
export const favoriteActivityList = (page_num, page_limit, cover_format = PICTURE_FORMAT, logo_format = PICTURE_FORMAT) => {
    return request({
        url: "/v1/user/favorite/activity/list",
        method: "get",
        params: {
            page_num,
            page_limit,
            cover_format,
            logo_format,
        },
    });
}

/**
 * 收藏的文章列表
 * @param {Number} page_num 
 * @param {Number} page_limit 
 * @param {String} cover_format 文章封面图片尺寸 三种格式：s、m、l
 * @param {String} logo_format 报刊社 logo 图片尺寸 三种格式： s、m、l
 * @returns 
 */
export const favoriteArticleList = (page_num, page_limit, cover_format = PICTURE_FORMAT, logo_format = PICTURE_FORMAT) => {
    return request({
        url: "/v1/user/favorite/article/list",
        method: "get",
        params: {
            page_num,
            page_limit,
            cover_format,
            logo_format,
        },
    });
}

/**
 * 收藏的音频列表
 * @param {Number} page_num 
 * @param {Number} page_limit 
 * @param {String} cover_format 音频封面图片尺寸 三种格式：s、m、l
 * @param {String} logo_format 报刊社 logo 图片尺寸 三种格式： s、m、l
 * @returns 
 */
export const favoriteAudioList = (page_num, page_limit, cover_format = PICTURE_FORMAT, logo_format = PICTURE_FORMAT) => {
    return request({
        url: "/v1/user/favorite/audio/list",
        method: "get",
        params: {
            page_num,
            page_limit,
            cover_format,
            logo_format,
        },
    });
}

/**
 * 收藏的专栏列表
 * @param {Number} page_num 
 * @param {Number} page_limit 
 * @param {String} cover_format 专栏封面图片尺寸 三种格式：s、m、l
 * @param {String} logo_format 报刊社 logo 图片尺寸 三种格式： s、m、l
 * @returns 
 */
export const favoriteColumnList = (page_num, page_limit, cover_format = PICTURE_FORMAT, logo_format = PICTURE_FORMAT) => {
    return request({
        url: "/v1/user/favorite/column/list",
        method: "get",
        params: {
            page_num,
            page_limit,
            cover_format,
            logo_format,
        },
    });
}

/**
 * 收藏的文创产品列表
 * @param {Number} page_num 
 * @param {Number} page_limit 
 * @param {String} cover_format 文创产品封面图片尺寸 三种格式：s、m、l
 * @param {String} logo_format 报刊社 logo 图片尺寸 三种格式： s、m、l
 * @returns 
 */
export const favoriteCulturalProductList = (page_num, page_limit, cover_format = PICTURE_FORMAT, logo_format = PICTURE_FORMAT) => {
    return request({
        url: "/v1/user/favorite/cultural/products/list",
        method: "get",
        params: {
            page_num,
            page_limit,
            cover_format,
            logo_format,
        },
    });
}

/**
 * 收藏的数据库产品列表
 * @param {Number} page_num 
 * @param {Number} page_limit 
 * @param {String} cover_format 数据库产品封面图片尺寸 三种格式：s、m、l
 * @param {String} logo_format 报刊社 logo 图片尺寸 三种格式： s、m、l
 * @returns 
 */
export const favoriteDatabaseProductList = (page_num, page_limit, cover_format = PICTURE_FORMAT, logo_format = PICTURE_FORMAT) => {
    return request({
        url: "/v1/user/favorite/database/products/list",
        method: "get",
        params: {
            page_num,
            page_limit,
            cover_format,
            logo_format,
        },
    });
}

/**
 * 收藏的原创 IP 列表
 * @param {Number} page_num 
 * @param {Number} page_limit 
 * @param {String} cover_format 原创 IP 封面图片尺寸 三种格式：s、m、l
 * @param {String} logo_format 报刊社 logo 图片尺寸 三种格式： s、m、l
 * @returns 
 */
export const favoriteIPProductList = (page_num, page_limit, cover_format = PICTURE_FORMAT, logo_format = PICTURE_FORMAT) => {
    return request({
        url: "/v1/user/favorite/ip/products/list",
        method: "get",
        params: {
            page_num,
            page_limit,
            cover_format,
            logo_format,
        },
    });
}

/**
 * 收藏的纸刊列表
 * @param {Number} page_num 
 * @param {Number} page_limit 
 * @param {String} cover_format 纸刊封面图片尺寸 三种格式：s、m、l
 * @param {String} logo_format 报刊社 logo 图片尺寸 三种格式： s、m、l
 * @returns 
 */
export const favoriteJournalList = (page_num, page_limit, cover_format = PICTURE_FORMAT, logo_format = PICTURE_FORMAT) => {
    return request({
        url: "/v1/user/favorite/journal/list",
        method: "get",
        params: {
            page_num,
            page_limit,
            cover_format,
            logo_format,
        },
    });
}
/******************** 用户收藏相关 end ********************/